#include "mainwindow.h"
#include "ui_mainwindow.h"

/*
 * TEST: 菜单栏
 * QMenuBar 表示菜单栏
 * QMenu 表示菜单栏中的每一项
 * QAction 表示 QMenu 中的每个选项，也包括工具栏中的每一个选项-
 *
 * QAction 在被点击的时候会发送信号，triggered 信号
 * 在 QMenu 初始化的时候添加一个 R("&F") 就可以自动添加快捷键
 *
 * 同理，这个用法在 QAction 也是一样的用法
 *
 * QMenu 也可以通过 addMenu 来添加子菜单
*/

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    /*
     * TEST1: 设置菜单栏
    */
    // QMenuBar* menubar = new QMenuBar();		// 这么写存在内存泄露的问题
    QMenuBar* menubar = this->menuBar();		// 可以通过这种方式来避免内存泄漏，因为这个 UI 图一开始就会创建一个菜单栏
    this->setMenuBar(menubar);

    // 添加菜单栏
    QMenu* fileMenu = new QMenu("File (&F)");
    QMenu* viewMenu = new QMenu("View (&V)");
    QMenu* toolMenu = new QMenu("Tool (&T)");

    menubar->addMenu(fileMenu);
    menubar->addMenu(viewMenu);
    menubar->addMenu(toolMenu);

    // 添加菜单项
    QAction* newFile = new QAction("New File (&N)");
    QAction* saveFile = new QAction("Save File (&S)");
    QAction* saveAsFile = new QAction("Save As");
    QAction* exitFile = new QAction("Exit");

    fileMenu->addAction(newFile);
    fileMenu->addAction(saveFile);
    /*
     * TEST 添加分割线
     * 如果菜单里面的菜单项特别多，就可以通过分割线来进行分组
    */
    fileMenu->addSeparator();
    fileMenu->addAction(saveAsFile);
    fileMenu->addAction(exitFile);

    // 为 Action 添加信号槽
    connect(newFile, &QAction::triggered, this, &MainWindow::on_new_file_action_triggered);
    connect(exitFile, &QAction::triggered, this, &MainWindow::close);

    // 添加子菜单
    QMenu* RectProjMenu = new QMenu("Open Recent File");
    RectProjMenu->addAction(new QAction("untitled"));
    fileMenu->addMenu(RectProjMenu);

    /*
     * TEST 添加图标 QIcon(基于 qrc 文件)
     * 使用 qrc 文件里面的资源的时候记得使用 ":/" 表示将访问 qrc 里面的资源
    */
    newFile->setIcon(QIcon(":/test.png"));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_new_file_action_triggered()
{
    qDebug() << "hello world";
}

